#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{


/////////////////////////////////////////////////////缓冲区//////////////////////////////////////////////////////
    
    //往显示器（stdout）打印时：缓冲区一般按行刷新
    //往文件里（如重定向）打印时：一般写满了缓冲区再刷新
    
    //库函数调用，数据放在库函数的缓冲区里
    printf("printf\n");
    fprintf(stdout, "fprintf\n");
    fputs("fputs\n", stdout);
    
    const char* s = "write\n";
    write(1, s, strlen(s));  //系统调用，数据放在系统的缓冲区里，
                             //调用一次系统缓冲区就会刷新，子进程拿不到数据
    
    fork(); //往显示器打印：所有都只打印一遍，因为按行数新，刷新后缓冲区无内容，子进程取不到数据
            //重定向往文件里打印：子进程从库缓冲区里拿数据时数据依然在，所以前三句会打印2次
    return 0;
}
